5748
22096
Felsorolom a Web Service névjegyeit, és megjelenítem a névjegyek 'szakaszos' tableView-ban, a képernyőképen látható módon.
A probléma az, hogy ugyanazokat a címkeértékeket kapom az A szakasz és az S szakasz első sorának jelölőnégyzeteihez. Rendeztem egy tömböt és megjelenítettem az indexelt táblázat nézetében. Hogyan lehet különböző indexértékeket kapni az indexPath.row függvényében, a megjelenített szakaszok számától függetlenül. Itt próbálkoztam
A cellForRowAtIndexPath fájlban:
UIButton * checkBox;
if (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiomPhone)
{
checkBox = [[UIButton kiosztás] initWithFrame: CGRectMake (7, 8, 30, 30)];
}
más
{
checkBox = [[UIButton kiosztás] initWithFrame: CGRectMake (15, 13, 30, 30)];
}
// int cnt = 0;
// for (int i = indexPath.section - 1; i> 0; i--)
// {
// cnt + = [[objectForCharacters objectForKey: [arrayOfCharacters objectAtIndex: i]] szám]; // az arrayOfCharachters karaktere "A" - "Z"
//}
//checkBox.tag = cnt + indexPath.row;
[checkBox setImage: [UIImage imageNamed: @ "checkBox.png"] forState: UIControlStateNormal];
[checkBox addTarget: self action: @selector (checkBoxClicked :) forControlEvents: UIControlEventTouchUpInside];
[checkBox setTag: indexPath.row];
[cell.contentView addSubview: checkBox];
visszatérő cella;
}
- (void) checkBoxClicked: (id) küldő
{
CGPoint buttonPosition = [küldő convertPoint: CGPointZero toView: self.tableViewContact];
NSIndexPath * indexPath = [self.tableViewContact indexPathForRowAtPoint: buttonPosition];
UIButton * tappedButton = (UIButton *) küldő;
NSLog (@ "Címke száma =% d", [küldő címke]);
IF
{
[sender setImage: [UIImage imageNamed: @ "checkBoxMarked.png"] forState: UIControlStateNormal];
if (indexPath! = Nil)
{
NSString * finalIntId = [mutableArrayOfIds objectAtIndex: indexPath.row]; // a jelölőnégyzetek azonosítóit tárolja a mutableArrayOfIds fájlban
NSLog (@ "Címkézett ellenőrzött gomb id =% @", finalIntId);
[arrayOfIds addObject: finalIntId];
}
// NSString * finalIntId = [mutableArrayOfIds objectAtIndex: tappedButton.tag];
// NSString * finalIntId = [mutableArrayOfIds objectAtIndex: indexPath.row];
}
más
{
[sender setImage: [UIImage imageNamed: @ "checkBox.png"] forState: UIControlStateNormal];
NSLog (@ "Ellenőrizetlen");
// [arrayOfIds removeObjectAtIndex: tappedButton.tag];
}
}
- (NSString *) tableView: (UITableView *) tableView titleForHeaderInSection: (NSInteger) szakasz {
ha ([[arrayOfCharacters szám] == 0)
{
Visszatérés @"";
}
return [NSString stringWithFormat: @ "% @", [arrayOfCharacters objectAtIndex: szakasz]];
}
- (NSArray *) szakaszIndexTitlesForTableView: (UITableView *) tableView
{
NSArray * toBeReturned = [NSArray arrayWithArray:
[@ "A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | # "
componentsSeparatedByString: @ "|"]];
return toBeReturned;
}
- (NSInteger) tableView: (UITableView *) tableView sectionForSectionIndexTitle: (NSString *) title atIndex: (NSInteger) index
{
NSI egész szám = 0;
for (NSString * karakter az arrayOfCharactersben) {
if ([karakter isEqualToString: cím]) {
visszatérés száma;
}
szám ++;
}
visszatér 0;
}
- [NSInteger] numberOfSectionsInTableView: (UITableView *) tableView
{
return [arrayOfCharacters szám];
// return 1;
}
- (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) szakasz
{
// return [mutableArray count];
return [[objectForCharacters objectForKey: [arrayOfCharacters objectAtIndex: szakasz]] count];
} 
ugyanazt a címke értéket állítja be minden szakaszhoz, amelynek azonos sora van.
Az indexPath két tulajdonsággal rendelkezik: {section, row}.
Mondjuk, hogy az A szakasznak két sora van,
az 1. sorhoz -> indexPath.section = 0, indexPath.row = 0;
a 2. sorhoz-> indexPath.section = 0, indexPath.row = 1;
Mondjuk, hogy az S szakasznak két sora van,
az 1. sorhoz -> indexPath.section = 1, indexPath.row = 0;
a 2. sorhoz-> indexPath.section = 1, indexPath.row = 1;
Tehát az A szakasz 1. sorához és az S szakasz 1. sorához ugyanazt a címke értéket állítja be, amely 0. A probléma merül fel.
Próbálja meg beállítani a címke értékét az alábbiak szerint.
button.tag = indexPath.section * 1000 + indexPath.row;
a szakasz és a sor lekérésekor,
NSInteger szakasz = (button.tag) / 1000;
NSInteger sor = (button.tag)% 1000;
|
Próbáld ezt...
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
{
statikus NSString * CellIdentifier = @ "Cell";
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
if (cella == nulla) {
cella = [[UITableViewCell allokáció] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier];
}
UIButton * checkBox = [[UIButton allokálás] initWithFrame: CGRectMake (280, 10, 50, 44)];
checkBox.backgroundColor = [UIColor orangeColor];
[checkBox addTarget: self action: @selector (checkBoxClicked: event:) forControlEvents: UIControlEventTouchUpInside];
[checkBox setTag: indexPath.row];
[cell.contentView addSubview: checkBox];
visszatérő cella;
}
- (void) checkBoxClicked: (id) küldő esemény: (id) esemény
{
NSSet * touches = [esemény allTouches];
UITouch * touch = [bármilyen objektumot megérint];
CGPoint currentTouchPosition = [touch locationInView: self.tv]; // itt a tv a TableView Object
NSIndexPath * indexPath = [self.tv indexPathForRowAtPoint: currentTouchPosition];
NSLog (@ "az indePath.section% d értéke, indexPath.row% d", indexPath.section, indexPath.row);
}
|
Ez azért történik, mert címkét rendel a SZEKCIÓK független gombokhoz.
Az A & S szakaszok első sorának mindkét sora = 0. Tehát a megfelelő gombhoz hozzárendelt címke 0. Kiosztania kell őket, a szekciókra hivatkozva.
azt javaslom, hogy rendelje hozzá az akadálymentességet vesszővel elválasztott formával, amely a szakasz, sort tartalmazza.
És a módszeredben
- (void) checkBoxClicked: (id) küldő
{
// vesszővel elválasztott formából válassza ki a karakterláncot. Az 1. a szakasz, a második a sor.
}
a második lehetőség: Csináld bármit, amit csinálsz, és hajtsd végre a Button módszerét.
CGPoint buttonPosition = [küldő convertPoint: CGPointZero toView: self.tableView];
NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: buttonPosition];
if (indexPath! = nulla)
{
... az indexpath.section az Ön szakasza, az index path.row pedig a sora.
}
Van harmadik lehetőség is.
a cellforRowAtIndexpath programban rendelje hozzá a gombjának a címet
- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
[btn setTitle: <# Your Row #> forState: UIControlStateDisabled];
[btn setTag <#A szakasz #>];
így a gombmódszerben történő fogadáskor rendelkezhet mind a Szakasszal (Címke), mind a Sorral (Cím fogyatékkal élőknek).
- (void) checkBoxClicked: (id) küldő {[button titleForState: UIControlStateDisabled]; // a sorod
button.tag // szakasza}
|
Próbáld ezt!
Minden szakasz ismerheti a jobb oldali szakaszok számát, majd adja hozzá az egyes sorok számát.
[[fieldTitlesList objectAtIndex: indexPath.section - 1] szám] + indexPath.row
A fieldTitlesList a szakaszok tömbje.
|
Hozzáadtam a következő kódot, amely megoldotta a problémámat
NSIinteger rowNumber = 0;
for (NSInteger i = 0; i